﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class Ценообразование
	{
		// Функция возвращает сумму скидки.
		//
		// Параметры:
		//  Сумма - Число, сумма со скидкой.
		//  Скидка - Число, процент скидки.
		//
		// Возвращаемое значение:
		//  Число - сумма скидки.
		//

		public object ПолучитьСуммуСкидки(/*Сумма, Скидка*/)
		{
			if(true/*ЗначениеЗаполнено(Скидка) И Скидка <> 100*/)
			{
				//СуммаСкидки = Сумма / (100 - Скидка) * Скидка;
			}
			return null;
		}
		// ПолучитьСуммуСкидки()
		//
		//
		// Параметры:
		//  ДатаЦен - исходная дата.
		//
		// Возвращаемое значение:
		//  Дата - дата (со временем), на которую будут рассчитаны цены.
		//

		public object ПолучитьАктуальнуюДатуРасчетаЦен(/*ДатаЦен*/)
		{
			//ТекДата = ТекущаяДата();
			if(true/*НЕ ЗначениеЗаполнено(ДатаЦен)*/)
			{
				//Результат = ТекДата;
			}
			return null;
		}
		// ПолучитьАктуальнуюДатуРасчетаЦен()
		// Функция возвращает массив получателей скидки, для которых необходимо рассчитать скидки.
		//
		// Параметры:
		//  ВидРеализации - значение перечисления "ВидыСкидок".
		//  ДокументОбъект - объект документа.
		//
		// Возвращаемое значение:
		//  Массив - массив с получателями скидки.
		//

		public object ПолучитьМассивПолучателейСкидки(/*ВидРеализации, ДокументОбъект*/)
		{
			//МассивПолучателей = Новый Массив;
			if(true/*ВидРеализации = Перечисления.ВидыСкидок.Розничная*/)
			{
				//МассивПолучателей.Добавить(ДокументОбъект.Склад);
				//МассивПолучателей.Добавить(Справочники.Склады.ПустаяСсылка());
			}
			return null;
		}
		// ПолучитьМассивПолучателейСкидки()
		// Функция проверяет, является ли набор-комплект спец. предложением на указанную дату.
		//
		// Параметры:
		//  Номенклатура - набор-комплект, который нужно проверить.
		//  Дата - дата, на которую нужно проверить.
		//
		// Возвращаемое значение:
		//  Булево - Истина, если переданный набор-комплект является спец. предложением.
		//

		public object ЭтоСпецПредложение(/*Дата, Номенклатура, ХарактеристикаНоменклатуры, МассивПолучателей*/)
		{
			/*Запрос = Новый Запрос("
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	1 КАК Результат
	|ИЗ
	|	РегистрСведений.СкидкиНоменклатурыНатуральные.СрезПоследних(&Дата,
	|	   ПолучательСкидки В (&МассивПолучателей)) КАК СкидкиНатуральные
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрСведений.ВремяДействияСкидок КАК ВремяДействия
	|ПО
	|	СкидкиНатуральные.Регистратор = ВремяДействия.Регистратор
	|ГДЕ
	|	СкидкиНатуральные.СпецПредложение = &Номенклатура
	|	И СкидкиНатуральные.ХарактеристикаСпецПредложения = &ХарактеристикаНоменклатуры
	|	И (ВремяДействия.Регистратор ЕСТЬ NULL
	|	ИЛИ ВремяДействия.ДеньНедели = &ДеньНедели
	|	И (&ТекущееВремя МЕЖДУ ВремяДействия.ВремяНачала И ВремяДействия.ВремяОкончания)
	|	И (СкидкиНатуральные.ДатаОкончания = &ПустаяДата
	|	ИЛИ СкидкиНатуральные.ДатаОкончания >= &Дата))
	|");*/
			//Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
			//Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры);
			//Запрос.УстановитьПараметр("МассивПолучателей", МассивПолучателей);
			//Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
			//Запрос.УстановитьПараметр("ПустаяДата", '00010101000000');
			//Запрос.УстановитьПараметр("ДеньНедели", Перечисления.ДниНедели[ДеньНедели(Дата) - 1]);
			//Запрос.УстановитьПараметр("ТекущееВремя", Дата(1, 1, 1, Час(Дата), Минута(Дата), Секунда(Дата)));
			return null;
		}
		// ЭтоСпецПредложение()
		// Изменяет переданную цену по условию продаж.
		//
		// Параметры:
		//  Дата - дата, на которую нужно брать условие продаж.
		//  Номенклатура - переданная номенклатура.
		//  УсловиеПродаж - переданное условие продаж.
		//  ПолученнаяЦена - цена, которую надо изменить. В эту переменную возвращается новая цена.
		//

		public void ИзменитьЦенуПоУсловиюПродаж(/*Дата, Номенклатура, УсловиеПродаж, ПолученнаяЦена*/)
		{
			if(true/*ПолученнаяЦена <> 0 И ЗначениеЗаполнено(УсловиеПродаж)*/)
			{
				//Запрос = Новый Запрос;
				//Запрос.УстановитьПараметр("Дата", Дата);
				//Запрос.УстановитьПараметр("УсловиеПродаж", УсловиеПродаж);
				//Запрос.УстановитьПараметр("Группы", ПолучитьМассивГруппНоменклатуры(Номенклатура));
				/*Запрос.Текст = "
		|ВЫБРАТЬ
		|	НаценкиПоУсловиямПродаж.ПроцентНаценки КАК ПроцентНаценки
		|ИЗ
		|	РегистрСведений.НаценкиПоУсловиямПродаж.СрезПоследних(&Дата, УсловиеПродаж = &УсловиеПродаж
		|	   И НоменклатурнаяЦеноваяГруппа В (&Группы)) КАК НаценкиПоУсловиямПродаж
		|";*/
				//Выборка = Запрос.Выполнить().Выбрать();
				if(true/*Выборка.Следующий()*/)
				{
					//ПолученнаяЦена = ПолученнаяЦена * (1 + Выборка.ПроцентНаценки / 100);
				}
			}
		}
		// ИзменитьЦенуПоУсловиюПродаж()
		// Возвращает массив из двух элементов: номенклатурной и ценовой группы, к которым принадлежит
		// переданная номенклатура.
		//
		// Параметры:
		//  Номенклатура - переданная номенклатура.
		//
		// Возвращаемое значение:
		//  Массив - номенклатурная и ценовая группа к которым принадлежит переданная номенклатура.
		//

		public object ПолучитьМассивГруппНоменклатуры(/*Номенклатура*/)
		{
			//Группы = Новый Массив;
			//Группы.Добавить(Номенклатура.ЦеноваяГруппа);
			//Группы.Добавить(Номенклатура.НоменклатурнаяГруппа);
			return null;
		}
		// ПолучитьМассивГруппНоменклатуры()
		// Возвращает массив характеристик: ПустаяХарактеристика + ХарактеристикаНоменклатуры,
		// если ХарактеристикаНоменклатуры <> Неопределено
		//
		// Параметры:
		//  ХарактеристикаНоменклатуры - переданная характеристика номенклатуры.
		//
		// Возвращаемое значение:
		//  Массив - если ХарактеристикаНоменклатуры = Неопределено, то в массиве только ПустаяХарактеристика.
		//

		public object ПолучитьМассивХарактеристик(/*ХарактеристикаНоменклатуры*/)
		{
			//Характеристики = Новый Массив;
			//Характеристики.Добавить(Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
			if(true/*ХарактеристикаНоменклатуры <> Неопределено*/)
			{
				//Характеристики.Добавить(ХарактеристикаНоменклатуры);
			}
			return null;
		}
		// ПолучитьМассивХарактеристик()
		// Округляет число по заданному порядку. Если задано (=Истина) "ОкруглятьВБольшуюСторону",
		// то число 123.37 при порядке округление 0.5 превратиться в 123.50, а число 0.1
		// при порядке округления 5 станет равным 5.
		//
		// Параметры:
		//  Число                    - исходное число
		//  ПорядокОкругления        - элемент перечисления Порядки окгугления:
		//                             "шаг" округления (0.01 (арифметическое), 0.01, 0.05, 0.1, 0.5, 1, 5, 10, 50, 100)
		//  ОкруглятьВБольшуюСторону - булево, определяет способ округления: если Истина,
		//                             то при порядке округления "5" 0.01 будет округлена до 5,
		//                             Ложь - округление по арифметическим правилам
		//
		// Возвращаемое значение:
		//  Округленное по заданному порядку значение
		//

		public object ОкруглитьЦену(/*Число, ПараметрПорядокОкругления, ОкруглятьВБольшуюСторону*/)
		{
			if(true/*НЕ ЗначениеЗаполнено(Число)*/)
			{
			}
			/*// Преобразуем порядок округления числа.
*/
			/*// Если передали пустое значение порядка, то округлим до копеек. 
*/
			if(true/*НЕ ЗначениеЗаполнено(ПараметрПорядокОкругления)*/)
			{
				//ПорядокОкругления = Перечисления.ПорядкиОкругления.Окр0_01;
			}
			//Порядок = Число(Строка(ПорядокОкругления));
			/*// вычислим количество интервалов, входящих в число
*/
			//КоличествоИнтервал	= Число / Порядок;
			/*// вычислим целое количество интервалов.
*/
			//КоличествоЦелыхИнтервалов = Цел(КоличествоИнтервал);
			if(true/*КоличествоИнтервал = КоличествоЦелыхИнтервалов*/)
			{
				/*// Числа поделились нацело. Округлять не нужно.
*/
				//Результат	= Число;
			}
			return null;
		}
		// ОкруглитьЦену()
		// Производит пересчет цен при изменении флагов учета налогов.
		// Пересчет зависит от способа заполнения цен, при заполнении По ценам номенклатуры (при продаже)
		// хочется избегать ситуаций, когда компания  «теряет деньги» при пересчете налогов.
		// Поэтому если в документе флаг "Учитывать налог" выключен, то цены должны браться напрямую из справочника,
		// потому что хочется продавать по той же цене, независимо от режима налогообложения.
		// Например, если отпускная цена задана с НП для избежания ошибок округления, то это не значит,
		// что при отпуске без НП мы должны продать дешевле. Если же флаг учета налога в документе включен,
		// то цены должны пересчитываться при подстановке в документ:
		// налог должен включаться или не включаться в зависимости от флага включения налога в типе цен.
		// При заполнении по ценам контрагентов (при покупке) хочется хранить цены поставщиков.
		// Поэтому нужно пересчитывать всегда по установленным флагам в документе и в типе цен.
		// Это гарантирует, что при записи цен в регистр и последующем их чтении,
		// например, при заполнении следующего документа, мы с точностью до ошибок округления при пересчете
		// получим те же самые цены.
		//
		// Параметры:
		//  Цена                - число, пересчитваемое значение цены,
		//  СпособЗаполненияЦен - ссылка на перечисление СпособыЗаполненияЦен, определяет способ расчета,
		//						  "при продаже" или "при покупке", см описание функции,
		//  ЦенаВключаетНДС     - булево, определяет содержит ли переданное значение цены НДС,
		//  УчитыватьНДС        - булево, определяет должно ли новое значение цены учитвать НДС,
		//  СуммаВключаетНДС    - булево, определяет должно ли новое значение цены включать НДС,
		//  СтавкаНДС           - число, ставка НДС,
		//
		// Возвращаемое значение:
		//  Числое, новое значение цены.
		//

		public object ПересчитатьЦенуПриИзмененииФлаговНалогов(/*Цена, СпособЗаполненияЦен, ЦенаВключаетНДС,
						УчитыватьНДС, СуммаВключаетНДС, СтавкаНДС*/)
		{
			/*// Инициализация переменных
*/
			//НадоВключитьНДС  = Ложь;
			//НадоИсключитьНДС = Ложь;
			//НоваяЦена		 = Цена;
			if(true/*СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры*/)
			{
				if(true/*УчитыватьНДС*/)
				{
					if(true/*СуммаВключаетНДС
			   И (НЕ ЦенаВключаетНДС)*/)
					{
						/*// Надо добавлять НДС       
*/
						//НадоВключитьНДС = Истина;
					}
				}
			}
			if(true/*НадоИсключитьНДС*/)
			{
				//НоваяЦена = (НоваяЦена * 100) / (100 + СтавкаНДС);
			}
			if(true/*НадоВключитьНДС*/)
			{
				//НоваяЦена = (НоваяЦена * (100 + СтавкаНДС)) / 100;
			}
			return null;
		}
		// ПересчитатьЦенуПриИзмененииФлаговНалогов()
		// Пересчитывает цену для другой единицы измерения
		//
		// Параметры:
		//  Цена         - число, значение цены, которое надо пересчитать,
		//  ЕдиницаЦены  - ссылка на справочник "ЕдиницыИзмерения", определяет единицу, за которую назначена Цена
		//  НоваяЕдиница - ссылка на справочник "ЕдиницыИзмерения", определяет единицу, за которую надо получить
		//                 новое значение цены. Если не заполнено, то устанавливается равной ЕдиницаЦены без пересчета.
		//
		// Возвращаемое значение:
		//  Новое значение цены.
		//

		public object ПересчитатьЦенуПриИзмененииЕдиницы(/*Цена, ЕдиницаЦены, НоваяЕдиница*/)
		{
			//НовоеЗначениеЦены = Цена;
			if(true/*ЕдиницаЦены <> НоваяЕдиница*/)
			{
				if(true/*НЕ ЗначениеЗаполнено(НоваяЕдиница)*/)
				{
					/*// параметр единицы не задан, значить надо возвращать в единице цены
*/
					if(true/*НЕ ЗначениеЗаполнено(ЕдиницаЦены)*/)
					{
						/*// если не задана единица цены, то будем счатать цену нулевой
*/
						//НовоеЗначениеЦены = 0;
					}
				}
			}
			return null;
		}
		// ПересчитатьЦенуПриИзмененииЕдиницы()
		// Пересчитывает цену в другую валюту
		//
		//  Цена            - число, значение цены, которое надо пересчитать,
		//  ВалютаЦены      - ссылка на справочник "Валюты", определяет валюту, в которой назначена Цена
		//  НоваяВалюта     - ссылка на справочник "Валюты", определяет валюту, в которой надо получить
		//                    новое значение цены. Если не заполнено, то устанавливается равной ВалютаЦены без пересчета,
		//  КурсНовойВалюты - курс новой валюты, по которому надо пересчитать цену, если не задан, то берем курс по справочнику
		//  КратностьНовойВалюты - кратность новой валюты, по которой надо пересчитать цену, если не задана, то берем курс по справочнику
		//  Дата            - дата, на которую надо пересчитать цену.
		//
		// Возвращаемое значение:
		//  Новое значение цены.
		//

		public object ПересчитатьЦенуПриИзмененииВалюты(/*Цена, ВалютаЦены, НоваяВалюта, КурсНовойВалюты = 0, КратностьНовойВалюты = 1, Дата = Неопределено */)
		{
			//НовоеЗначениеЦены = Цена;
			if(true/*НЕ ЗначениеЗаполнено(НоваяВалюта)*/)
			{
				/*// параметр валюты не задан, значить надо возвращать в валюте цены
*/
				//НоваяВалюта = ВалютаЦены;
			}
			return null;
		}
		// ПересчитатьЦенуПриИзмененииВалюты()
		// Позволяет получить список реквизитов документа, необходимых для дальнейшей
		// передачи в обработку заполнения цен и валют.
		//
		// Параметры:
		//  ДокументОбъект      - объект документа, для реквизитов будет производится заполнение
		//  СтруктураИсключений - структура, в которую передаются те исключения, которые или невозможно
		//                        определить по метаданным, или, несмотря ни на что, нельзя включать в
		//                        возвращаемую структуру.
		//                        В структуре - ключ = имя реквизита, значение = истина (необходимо добавить
		//                        в структуру) или ложь (нельзя добавлять в структуру)
		//
		// Возвращаемое значене:
		//  Сформированная структура реквизитов документа.
		//

		public object ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования(/*ДокументОбъект, СтруктураИсключений = Неопределено*/)
		{
			//МетаданныеДокумента = ДокументОбъект.Метаданные();
			/*// Зададим, какие реквизиты вообще нам могут быть нужны.
*/
			//СтруктураВозможныхВариантовРеквизитов = Новый Структура;
			//СтруктураВозможныхВариантовРеквизитов.Вставить("ТипЦен");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("ВалютаДокумента");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("КурсДокумента");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("КратностьДокумента");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("КурсВзаиморасчетов");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("КратностьВзаиморасчетов");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("УчитыватьНДС");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("СуммаВключаетНДС");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("ИспользоватьПлановуюСебестоимость");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("РегистрироватьЦеныПоставщика");
			//СтруктураВозможныхВариантовРеквизитов.Вставить("УсловиеПродаж");
			/*// Зададим, какие реквизиты надо редактировать.
*/
			//СтруктураРеквизитовДокумента = Новый Структура;
			/*// Теперь проверим исключения.
*/
			if(true/*СтруктураИсключений <> Неопределено*/)
			{
			}
			return null;
		}
		// ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования()
		// Формирует и выполняет запрос по ценовым диапазонам
		// Параметры:
		//  ТипЦен - тип цен, для которого нужно получить шкалу диапазонов
		//  Дата - дата, на которую требуется получить актуальную шкалу
		//

		public object ПолучитьЗапросПоЦеновымДиапазонам(/*ТипЦен, Дата*/)
		{
			//ЗапросДиапазоны = Новый Запрос;
			//ЗапросДиапазоны.УстановитьПараметр("Дата", Дата);
			//ЗапросДиапазоны.УстановитьПараметр("ТипЦен", ТипЦен);
			/*ЗапросДиапазоны.Текст = "
	|ВЫБРАТЬ
	|	ДиапазоныЦен.ВерхняяГраница,
	|	ДиапазоныЦен.Цена,
	|	ДиапазоныЦен.Валюта
	|ИЗ
	|	РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(&Дата, ТипЦен = &ТипЦен) КАК ДиапазоныЦен
	|СОЕДИНЕНИЕ
	|	(ВЫБРАТЬ
	|		МАКСИМУМ(ДиапазоныЦенМакс.Период) КАК Период
	|	ИЗ
	|		РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(&Дата, ТипЦен = &ТипЦен) КАК ДиапазоныЦенМакс
	|	) КАК ДиапазоныЦенМакс
	|ПО
	|	ДиапазоныЦен.Период = ДиапазоныЦенМакс.Период
	|УПОРЯДОЧИТЬ ПО
	|	ДиапазоныЦен.ВерхняяГраница
	|";*/
			return null;
		}
		// ПолучитьЗапросПоЦеновымДиапазонам()
		// Получает цену по ценовым диапазонам.
		// Параметры:
		//  ТипЦен - тип цен, для которого нужно получить шкалу диапазонов.
		//  Дата - дата, на которую требуется получить актуальную шкалу.
		//  Цена - входящая цена.
		//  Валюта - переменная, куда функция возвращает валюту найденной цены.
		//

		public object ПолучитьЦенуПоЦеновымДиапазонам(/*ТипЦен, Дата, Знач Цена, Валюта, ВалютаВходящая*/)
		{
			if(true/*ВалютаВходящая <> ТипЦен.БазовыйТипЦен.ВалютаЦены*/)
			{
				//СтруктураКурсВходящейВалюты = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаВходящая, Дата);
				//СтруктураКурсНовойВалюты = МодульВалютногоУчета.ПолучитьКурсВалюты(ТипЦен.БазовыйТипЦен.ВалютаЦены, Дата);
				/*Цена = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Цена, ВалютаВходящая, ТипЦен.БазовыйТипЦен.ВалютаЦены,
		                                  СтруктураКурсВходящейВалюты.Курс, СтруктураКурсНовойВалюты.Курс,
		                                  СтруктураКурсВходящейВалюты.Кратность, СтруктураКурсНовойВалюты.Кратность);*/
			}
			//РасчетнаяЦена = 0;
			if(true/*Цена > 0*/)
			{
				//ЗапросДиапазоны = Новый Запрос;
				//ЗапросДиапазоны.УстановитьПараметр("Дата", Дата);
				//ЗапросДиапазоны.УстановитьПараметр("ТипЦен", ТипЦен);
				//ЗапросДиапазоны.УстановитьПараметр("Цена", Цена);
				/*ЗапросДиапазоны.Текст = "
		|ВЫБРАТЬ ПЕРВЫЕ 1
		|	ДиапазоныЦен.Цена,
		|	ДиапазоныЦен.Валюта
		|ИЗ
		|	РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(&Дата, ТипЦен = &ТипЦен) КАК ДиапазоныЦен
		|СОЕДИНЕНИЕ
		|	(ВЫБРАТЬ
		|		МАКСИМУМ(ДиапазоныЦенМакс.Период) КАК Период
		|	ИЗ
		|		РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(&Дата, ТипЦен = &ТипЦен) КАК ДиапазоныЦенМакс
		|	) КАК ДиапазоныЦенМакс
		|ПО
		|	ДиапазоныЦен.Период = ДиапазоныЦенМакс.Период
		|ГДЕ &Цена < ДиапазоныЦен.ВерхняяГраница
		|УПОРЯДОЧИТЬ ПО
		|	ДиапазоныЦен.ВерхняяГраница
		|";*/
				//Выборка = ЗапросДиапазоны.Выполнить().Выбрать();
				if(true/*Выборка.Следующий()*/)
				{
					//РасчетнаяЦена = Выборка.Цена;
					//Валюта = Выборка.Валюта;
				}
			}
			return null;
		}
		// ПолучитьЦенуПоЦеновымДиапазонам()
		// Функция возвращает цену номенклатуры для требуемой номенклатуры в указанном типе цен,
		// на заданную дату, за заданную единицу измерения, пересчитанную в требуемую валюту по заданному курсу.
		//
		// Параметры:
		//  Номенклатура         - ссылка на элемент справочника "Номенклатура", для которого надо получить цену,
		//  ХарактеристикаНоменклатуры - ссылка на элемент справочника "ХарактеристикаНоменклатуры",
		//  ТипЦен               - ссылка на элемент справочника "Типы цен", опредедяет цену какого типа надо получить,
		//  Дата                 - дата, на которую надо получить цену, если не заполнено, то берется рабочая дата
		//  ЕдиницаИзмерения     - ссылка на элемент справочника "Единицы измерения", определяет для какой единицы надо получить
		//                         цену, если не заполнен, то заполняется единицей цены
		//  Валюта               - ссылка на элемент справочника "Валюты", определяет валюту. в которой надо вернуть цену,
		//                         если не заполнен, то заполняется валютой цены
		//  Курс                 - число, курс требуемой валюты, если не заполнен, берется курс из регистра
		//                         сведений "Курсы валют",
		//  Кратность            - число, кратность требуемой валюты, если не заполнена, берется курс из регистра
		//                         сведений "Курсы валют",
		//  ПроцентСкидкиНаценки - число, процент наценки (скидки) на базовый тип цен, заполняется процентом
		//                         наценки (скидки) цены для цен, которые не рассчитываются автоматически.
		//
		// Возвращаемое значение:
		//  Число, рассчитанное значение цены.
		//

		public object ПолучитьЦенуНоменклатуры(/*Номенклатура, ХарактеристикаНоменклатуры = Неопределено, Знач ТипЦен, ДатаПараметр = Неопределено, ЕдиницаИзмерения = Неопределено,
	                             Валюта = Неопределено, Курс = 0, Кратность = 1, ПроцентСкидкиНаценки = 0, ДоговорКонтрагента = Неопределено,
	                             УсловиеПродаж = Неопределено*/)
		{
			if(true/*ЕдиницаИзмерения = Неопределено*/)
			{
				//ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.ПустаяСсылка();
				/*// для услуг
*/
			}
			//ХарактеристикиНоменклатуры = ПолучитьМассивХарактеристик(ХарактеристикаНоменклатуры);
			//Дата = ПолучитьАктуальнуюДатуРасчетаЦен(ДатаПараметр);
			//ПолученнаяЦена = 0;
			if(true/*ДоговорКонтрагента <> Неопределено*/)
			{
				//Запрос = Новый Запрос;
				//Запрос.УстановитьПараметр("Дата", Дата);
				//Запрос.УстановитьПараметр("Договор", ДоговорКонтрагента);
				//Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
				//Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", ХарактеристикиНоменклатуры);
				/*ТекстЗапроса = "
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
		|	УсловияПоставок.Цена                   КАК Цена,
		|	ВЫБОР	КОГДА сНоменклатура.Услуга И УсловияПоставок.ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)
		|			ТОГДА сНоменклатура.ЕдиницаХраненияОстатков
		|			ИНАЧЕ УсловияПоставок.ЕдиницаИзмерения
		|	КОНЕЦ                                  КАК ЕдиницаИзмерения,
		|	УсловияПоставок.ВалютаЦены             КАК ВалютаЦены
		|ИЗ
		|	РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.СрезПоследних(&Дата,
		|	   ДоговорКонтрагента = &Договор И Номенклатура = &Номенклатура
		|	   И ХарактеристикаНоменклатуры В (&ХарактеристикиНоменклатуры)) КАК УсловияПоставок
		|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|	Справочник.Номенклатура КАК сНоменклатура
		|ПО
		|	сНоменклатура.Ссылка = УсловияПоставок.Номенклатура
		|ГДЕ
		|	УсловияПоставок.Цена <> 0 И сНоменклатура.Ссылка = &Номенклатура
		|УПОРЯДОЧИТЬ ПО
		|	УсловияПоставок.ХарактеристикаНоменклатуры УБЫВ
		|";*/
				//Запрос.Текст = ТекстЗапроса;
				//Выборка = Запрос.Выполнить().Выбрать();
				if(true/*Выборка.Следующий()*/)
				{
					//ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(Выборка.Цена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
					//ПолученнаяЦена = ПересчитатьЦенуПриИзмененииВалюты(ПолученнаяЦена, Выборка.ВалютаЦены, Валюта, Курс, Кратность, Дата);
				}
				/*// Проверим, не установлены ли по этому договору типы цен для групп.
*/
				if(true/*ПолученнаяЦена = 0*/)
				{
					//Запрос = Новый Запрос;
					//Запрос.УстановитьПараметр("Дата", Дата);
					//Запрос.УстановитьПараметр("Контрагент", ДоговорКонтрагента.Владелец);
					//Запрос.УстановитьПараметр("Группы", ПолучитьМассивГруппНоменклатуры(Номенклатура));
					/*Запрос.Текст = "
			|ВЫБРАТЬ РАЗРЕШЕННЫЕ
			|	ТипыЦенПоГруппам.ТипЦен КАК ТипЦен
			|ИЗ
			|	РегистрСведений.ТипыЦенПоГруппамНоменклатурыДляПокупателей.СрезПоследних(&Дата, Контрагент = &Контрагент
			|	   И НоменклатурнаяЦеноваяГруппа В (&Группы)) КАК ТипыЦенПоГруппам
			|";*/
					//Выборка = Запрос.Выполнить().Выбрать();
					if(true/*Выборка.Следующий()*/)
					{
						if(true/*Не Выборка.ТипЦен.Пустая()*/)
						{
							/*// переопределим тип цен для расчета
*/
							//ТипЦен = Выборка.ТипЦен;
						}
					}
				}
			}
			if(true/*ПолученнаяЦена = 0 И ЗначениеЗаполнено(ТипЦен)*/)
			{
				/*// особых условий нет
*/
				//Запрос = Новый Запрос;
				//Запрос.УстановитьПараметр("Дата", Дата);
				//Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
				//Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", ХарактеристикиНоменклатуры);
				if(true/*ТипЦен.Рассчитывается*/)
				{
					/*// надо достать цену базового типа и рассчитать по наценке
*/
					//Запрос.УстановитьПараметр("ТипЦен", ТипЦен.БазовыйТипЦен);
					//Запрос.УстановитьПараметр("ТипЦенРасчетный", ТипЦен);
					//Запрос.УстановитьПараметр("СпособРасчета", ТипЦен.СпособРасчетаЦены);
					//Запрос.УстановитьПараметр("ПроцентНаценки", ТипЦен.ПроцентСкидкиНаценки);
				}
				/*Запрос.Текст = "
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
		|	ЦеныНоменклатурыСрезПоследних.Цена  КАК Цена,
		|	ВЫБОР	КОГДА сНоменклатура.Услуга И ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)
		|			ТОГДА сНоменклатура.ЕдиницаХраненияОстатков
		|			ИНАЧЕ ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения
		|	КОНЕЦ                               КАК ЕдиницаИзмерения,
		|";*/
				if(true/*ТипЦен.Рассчитывается*/)
				{
					/*Запрос.Текст = Запрос.Текст + "
			|	ЕСТЬNULL(ВложенныйЗапрос.ПроцентСкидкиНаценки, &ПроцентНаценки) КАК ПроцентСкидкиНаценки,
			|	ЕСТЬNULL(ВложенныйЗапрос.СпособРасчетаЦены, &СпособРасчета) КАК СпособРасчетаЦены,
			|";*/
				}
				/*Запрос.Текст = Запрос.Текст + "
		|	ЦеныНоменклатурыСрезПоследних.Валюта
		|ИЗ
		|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура
		|	   И ТипЦен = &ТипЦен И ХарактеристикаНоменклатуры В (&ХарактеристикиНоменклатуры)
		|	   ) КАК ЦеныНоменклатурыСрезПоследних
		|";*/
				if(true/*ТипЦен.Рассчитывается*/)
				{
					/*Запрос.Текст = Запрос.Текст + "
			|ЛЕВОЕ СОЕДИНЕНИЕ
			|	(ВЫБРАТЬ
			|		ЦеныНоменклатурыСрезПоследних.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
			|		ЦеныНоменклатурыСрезПоследних.СпособРасчетаЦены КАК СпособРасчетаЦены,
			|		ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
			|		ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
			|	ИЗ
			|		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура
			|		   И ТипЦен = &ТипЦенРасчетный
			|		   И ХарактеристикаНоменклатуры В (&ХарактеристикиНоменклатуры)
			|		   ) КАК ЦеныНоменклатурыСрезПоследних
			|	) КАК ВложенныйЗапрос
			|ПО
			|	ЦеныНоменклатурыСрезПоследних.Номенклатура = ВложенныйЗапрос.Номенклатура И ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ВложенныйЗапрос.ХарактеристикаНоменклатуры
			|";*/
				}
				/*Запрос.Текст = Запрос.Текст + "
		|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|	Справочник.Номенклатура КАК сНоменклатура
		|ПО
		|	сНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
		|ГДЕ
		|	сНоменклатура.Ссылка = &Номенклатура
		|УПОРЯДОЧИТЬ ПО
		|	ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры УБЫВ
		|";*/
				//Выборка = Запрос.Выполнить().Выбрать();
				if(true/*Выборка.Следующий()*/)
				{
					if(true/*ТипЦен.Рассчитывается*/)
					{
						//ВалютаТекущая = ТипЦен.ВалютаЦены;
						//ПолученнаяЦена = ПересчитатьЦенуПриИзмененииВалюты(Выборка.Цена, Выборка.Валюта, ВалютаТекущая, 0, 0, Дата);
						if(true/*Выборка.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон*/)
						{
							//ПолученнаяЦена = ПолучитьЦенуПоЦеновымДиапазонам(ТипЦен, Дата, ПолученнаяЦена, ВалютаТекущая, ВалютаТекущая);
						}
					}
					//ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(ПолученнаяЦена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
					//ПолученнаяЦена = ПересчитатьЦенуПриИзмененииВалюты(ПолученнаяЦена, ВалютаТекущая, Валюта, Курс, Кратность, Дата);
				}
			}
			//ИзменитьЦенуПоУсловиюПродаж(Дата, Номенклатура, УсловиеПродаж, ПолученнаяЦена);
			if(true/*ЗначениеЗаполнено(ТипЦен)*/)
			{
				//ПолученнаяЦена = ОкруглитьЦену(ПолученнаяЦена, ТипЦен.ПорядокОкругления, ТипЦен.ОкруглятьВБольшуюСторону);
			}
			return null;
		}
		// ПолучитьЦенуНоменклатуры()
		// Функция возвращает процент скидки (наценки) для требуемой номенклатуры в указанном типе цен ,
		// на заданную дату, используется, например, для.получения наценки цены в рознице.
		//
		// Параметры:
		//  Номенклатура               - ссылка на элемент справочника "Номенклатура", для которого надо получить цену,
		//  ХарактеристикаНоменклатуры - ссылка на элемент справочника "Характеристики номенклатуры",
		//  ТипЦен                     - ссылка на элемент справочника "Типы цен", опредедяет цену какого типа надо получить,
		//  Дата                       - дата, на которую надо получить цену, если не заполнено, то берется рабочая дата.
		//  ТолькоИзРегистра           - булево, "Истина" если необходимо получать данные только из регистра.
		//  НетДанных                  - булево, устанавливается в "Ложь" если нет данных в регистре сведений, "Истина" если есть.
		//
		// Возвращаемое значение:
		//  Число, значение процента скидки (наценки).
		//

		public object ПолучитьПроцентСкидкиНаценкиЦеныНоменклатуры(/*Номенклатура, ХарактеристикаНоменклатуры = Неопределено, ТипЦен, Дата = Неопределено, ТолькоИзРегистра = Ложь, НетДанных = Истина, ВернутьВсегда = Ложь*/)
		{
			//НетДанных = Истина;
			//ХарактеристикиНоменклатуры = ПолучитьМассивХарактеристик(ХарактеристикаНоменклатуры);
			/*// Если дата не заполнена, возьмем рабочую дату.
*/
			if(true/*НЕ ЗначениеЗаполнено(Дата)*/)
			{
				//Дата = ОбщегоНазначения.ПолучитьРабочуюДату();
			}
			//ПроцентСкидкиНаценки = 0;
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Дата", Дата);
			//Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
			//Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", ХарактеристикиНоменклатуры);
			//Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
			/*Запрос.Текст = "
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	ПроцентСкидкиНаценки
	|ИЗ
	|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура И ТипЦен = &ТипЦен
	|                                                         И ХарактеристикаНоменклатуры В(&ХарактеристикиНоменклатуры)) КАК ЦеныНоменклатурыСрезПоследних
	|
	|УПОРЯДОЧИТЬ ПО
	|	ХарактеристикаНоменклатуры УБЫВ
	|";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			if(true/*Выборка.Следующий()*/)
			{
				//ПроцентСкидкиНаценки = Выборка.ПроцентСкидкиНаценки;
				//НетДанных = Ложь;
			}
			if(true/*(ТипЦен.Рассчитывается И Не ТолькоИзРегистра) Или ВернутьВсегда*/)
			{
				if(true/*НЕ ЗначениеЗаполнено(ПроцентСкидкиНаценки)*/)
				{
					/*// процент скидки задан в типе цен
*/
					//ПроцентСкидкиНаценки = ТипЦен.ПроцентСкидкиНаценки;
				}
			}
			return null;
		}
		// ПолучитьПроцентСкидкиНаценкиЦеныНоменклатуры()
		// Функция возвращает цену контрагента для требуемой номенклатуры в указанном типе цен ,
		// на заданную дату, за заданную единицу измерения, пересчитанную в требуемую валюту по заданному курсу.
		//
		// Параметры:
		//  Номенклатура               - ссылка на элемент справочника "Номенклатура", для которого надо получить цену,
		//  ХарактеристикаНоменклатуры - ссылка на элемент справочника "Характеристики номенклатуры",
		//  Контрагент                 - ссылка на элемент справочника "Контрагенты", для которого надо получить цену,
		//  ТипЦен                     - ссылка на элемент справочника "Типы цен", опредедяет цену какого типа надо получить,
		//  Дата                       - дата, на которую надо получить цену, если не заполнено, то берется рабочая дата
		//  ЕдиницаИзмерения           - ссылка на элемент справочника "Единицы измерения", определяет для какой единицы надо получить
		//                               цену, если не заполнен, то заполняется единицей цены
		//  Валюта                     - ссылка на элемент справочника "Валюты", определяет валюту. в которой надо вернуть цену,
		//                               если не заполнен, то заполняется валютой цены
		//  Курс                       - число, курс требуемой валюты, если не заполнен, берется курс из регистра
		//                               сведений "Курсы валют".
		//  Кратность                  - число, кратность требуемой валюты, если не заполнена, берется курс из регистра
		//                               сведений "Курсы валют".
		//
		// Возвращаемое значение:
		//  Число, рассчитанное значение цены.
		//

		public object ПолучитьЦенуКонтрагента(/*Номенклатура, ХарактеристикаНоменклатуры = Неопределено, Контрагент,
	                            ТипЦен, Дата = Неопределено, ЕдиницаИзмерения = Неопределено,
	                            Валюта = Неопределено, Курс = 0, Кратность = 1,
	                            ДоговорКонтрагента = Неопределено, УсловиеПродаж = Неопределено*/)
		{
			//ХарактеристикиНоменклатуры = ПолучитьМассивХарактеристик(ХарактеристикаНоменклатуры);
			//Дата = ПолучитьАктуальнуюДатуРасчетаЦен(Дата);
			//ПолученнаяЦена = 0;
			if(true/*ДоговорКонтрагента <> Неопределено*/)
			{
				//Запрос = Новый Запрос;
				//Запрос.УстановитьПараметр("Дата", Дата);
				//Запрос.УстановитьПараметр("Договор", ДоговорКонтрагента);
				//Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
				//Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", ХарактеристикиНоменклатуры);
				/*ТекстЗапроса = "
		|ВЫБРАТЬ ПЕРВЫЕ 1
		|	УсловияПоставок.Цена,
		|	УсловияПоставок.ЕдиницаИзмерения,
		|	УсловияПоставок.ВалютаЦены
		|ИЗ
		|	РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.СрезПоследних(&Дата,
		|	   ДоговорКонтрагента = &Договор И Номенклатура = &Номенклатура
		|	   И ХарактеристикаНоменклатуры В (&ХарактеристикиНоменклатуры)) КАК УсловияПоставок
		|ГДЕ
		|	УсловияПоставок.Цена <> 0
		|УПОРЯДОЧИТЬ ПО
		|	УсловияПоставок.ХарактеристикаНоменклатуры УБЫВ
		|";*/
				//Запрос.Текст = ТекстЗапроса;
				//Выборка = Запрос.Выполнить().Выбрать();
				if(true/*Выборка.Следующий()*/)
				{
					//ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(Выборка.Цена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
					//ПолученнаяЦена = ПересчитатьЦенуПриИзмененииВалюты(ПолученнаяЦена, Выборка.ВалютаЦены, Валюта, Курс, Кратность, Дата);
				}
			}
			if(true/*ПолученнаяЦена = 0*/)
			{
				/*// особых условий нет
*/
				//Запрос = Новый Запрос;
				//Запрос.УстановитьПараметр("Дата", Дата);
				//Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
				//Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", ХарактеристикиНоменклатуры);
				//Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
				/*Запрос.Текст = "
		|ВЫБРАТЬ ПЕРВЫЕ 1
		|	ЦеныНоменклатурыКонтрагентов.Цена,
		|	ЦеныНоменклатурыКонтрагентов.ЕдиницаИзмерения,
		|	ЦеныНоменклатурыКонтрагентов.Валюта
		|ИЗ
		|	РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&Дата, Номенклатура = &Номенклатура И ТипЦен = &ТипЦен
		|	   И ХарактеристикаНоменклатуры В(&ХарактеристикиНоменклатуры)) КАК ЦеныНоменклатурыКонтрагентов
		|УПОРЯДОЧИТЬ ПО
		|	ХарактеристикаНоменклатуры УБЫВ
		|";*/
				//Выборка = Запрос.Выполнить().Выбрать();
				if(true/*Выборка.Следующий()*/)
				{
					//ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(Выборка.Цена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
					//ПолученнаяЦена = ПересчитатьЦенуПриИзмененииВалюты(ПолученнаяЦена, Выборка.Валюта, Валюта, Курс, Кратность, КонецДня(Дата));
				}
			}
			//ИзменитьЦенуПоУсловиюПродаж(Дата, Номенклатура, УсловиеПродаж, ПолученнаяЦена);
			return null;
		}
		// ПолучитьЦенуКонтрагента()
		// Выполняем пересчет документа после изменений в форме "Цены и валюта".
		//
		// Параметры:
		//  ДокументОбъект                 - документ;
		//  СпособЗаполненияЦен            - ссылка на перечисление СпособыЗаполненияЦен, определяет способ расчета,
		//                                  "при продаже" или "при покупке".
		//  СтруктураРеквизитовДокумента   - структура, задает список обрабатываемых реквизитов документа,
		//                                   если реквизит надо обрабатывать, то для него есть ключ в этой структуре.
		//  ИмяТабличнойЧасти              - строка, имя табличной части, которую надо пересчитать.
		//  ВалютаРегламентированногоУчета - валюта регламентированного учета
		//  СкидкаУстановлена              - переменная мСкидкаУстановлена модуля формы документа.
		//  СтруктураЗначений              - структура, соответствующая возвращаемой формой "Цены и валюта" (значения реквизитов
		//                                   документа до и после их изменеия в общей форме).
		//  Автозаполнение                 - признак автозаполнения
		//

		public void ОбработатьИзмененияПоКнопкеЦеныВалюта(/*ДокументОбъект, СпособЗаполненияЦен,
	                                            СтруктураРеквизитовДокумента,
	                                            ИмяТабличнойЧасти, ВалютаРегламентированногоУчета,
	                                            СкидкаУстановлена, СтруктураЗначений, Автозаполнение*/)
		{
			//МетаданныеДокумента = ДокументОбъект.Метаданные();
			//УказаниеСкладов = Константы.УказаниеСкладовВТабличнойЧастиДокументов.Получить();
			/*ИспользоватьКолонкуСкладПриПродаже = (УказаниеСкладов = Перечисления.ВариантыУказанияСкладовВТабличнойЧастиДокументов.ДляДокументовПоступленияРеализации)
	                                      Или (УказаниеСкладов = Перечисления.ВариантыУказанияСкладовВТабличнойЧастиДокументов.ДляДокументовРеализации);*/
			/*НеРассчитыватьПоРозничнымСкладам = (ТипЗнч(ДокументОбъект) = Тип ("ДокументОбъект.ОтчетОРозничныхПродажах"))
	                                    И (ИспользоватьКолонкуСкладПриПродаже);*/
			/*// если в табличной части есть хотя бы одна строка, надо пересчитывать
*/
			//НадоПересчитывать = Ложь;
			if(true/*ДокументОбъект[ИмяТабличнойЧасти].Количество() > 0*/)
			{
				//НадоПересчитывать = Истина;
			}
			//СтруктураПоиска = Новый Структура;
			/*// Для поиска в результате запроса
*/
			//ПересчитатьЦенуПоФлагамНалогов = Ложь;
			/*// Инициализация переменной
*/
			//ЕстьЦена                       = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Цена", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСумма                      = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Сумма", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьЦенаПередачи               = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЦенаПередачи", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСуммаПередачи              = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СуммаПередачи", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьЦенаПоступления            = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЦенаПоступления", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСуммаПоступления           = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СуммаПоступления", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьЦенаСтарая                 = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЦенаСтарая", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСуммаСтарая                = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СуммаСтарая", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьФактурнаяСтоимость         = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ФактурнаяСтоимость", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьХарактеристикаНоменклатуры = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ХарактеристикаНоменклатуры", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСуммаТовара                = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СуммаТовара", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьСуммаНДС                   = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("СуммаНДС", МетаданныеДокумента, ИмяТабличнойЧасти);
			//ЕстьПлановаяСебестоимость      = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПлановаяСебестоимость", МетаданныеДокумента, ИмяТабличнойЧасти);
			/*// Определим необходимость перерасчета цены.
*/
			//ПересчитатьЦенуПоФлагамНалогов = ОпределитьНеобходимостьПерерасчетаЦены(СтруктураЗначений);
			/*// Если задано пользователем, то надо перезаполнить табличную часть по новому типу цен
*/
			if(true/*СтруктураЗначений.ПерезаполнитьЦеныПоТипу и ЕстьЦена*/)
			{
				//СкладИзДокумента = ОбщегоНазначения.ПолучитьРеквизитШапки("Склад", ДокументОбъект, МетаданныеДокумента);
				if(true/*СкладИзДокумента = Неопределено*/)
				{
					//СкладИзДокумента = ОбщегоНазначения.ПолучитьРеквизитШапки("СкладОрдер", ДокументОбъект, МетаданныеДокумента);
				}
				/*// Получить нужные цены запросом
*/
				/*РезультатЗапросаЦен = СформироватьЗапросПоЦенам(СтруктураЗначений,
		                                                СпособЗаполненияЦен,
		                                                ДокументОбъект[ИмяТабличнойЧасти].ВыгрузитьКолонку("Номенклатура"),
		                                                ДокументОбъект.Дата,
		                                                ОбщегоНазначения.ПолучитьРеквизитШапки("Контрагент", ДокументОбъект, МетаданныеДокумента),
		                                                ОбщегоНазначения.ПолучитьРеквизитШапки("ДоговорКонтрагента", ДокументОбъект, МетаданныеДокумента),
		                                                СкладИзДокумента);*/
				//ВыборкаРезультатЗапросаЦен = РезультатЗапросаЦен.Выбрать();
				//СтруктураПоиска = Новый Структура;
				/*// структура для поиска в результате запроса
*/
				/*// В цикле по ТЧ перезаполняем цены, приводя их к текущим скидкам, валюте и режиму налогообложения
*/
				/*// Цикл по ТЧ для заполнения цен при изменении типа цен
*/
			}
		}
		// ОбработатьИзмененияПоКнопкеЦеныВалюта()
		// Рассчитываем итоговую плановую себестоимость по документу
		//
		// Параметры:
		//  ДокументОбъект - объект документа, в котором надо рассчитать итоговую плановую себестоимость
		//
		// Возвращаемое значение:
		//  Итоговая плановая себестоимость по документу со всеми налогами.
		//

		public object ИтогПлановаяСебестоимость(/*ДокументОбъект*/)
		{
			if(true/*Не ДокументОбъект.ИспользоватьПлановуюСебестоимость*/)
			{
				/*// Не выполняем никаких действий, если плановая себестоимость в документе не учитывается
*/
			}
			//ИтогПлановаяСебестоимость = 0;
			/*// Суммируем значения плановой себестоимости по каждой строке табличной части
*/
			return null;
		}
		// ИтогПлановаяСебестоимость()
		// Рассчитываем итоговое отклонение от плановой себестоимости по документу
		//
		// Параметры:
		//  ДокументОбъект                           - объект документа, в котором надо рассчитать
		//                                             итоговое отклонение от плановой себестоимости
		//  ПроцентОтклоненияОтПлановойСебестоимости - в этот параметр будет помещено значение.
		//
		// Возвращаемое значение:
		//  Итоговое отклонение от плановой себестоимости по документу со всеми налогами.
		//

		public object ПолучитьИтоговоеОтклонениеОтПлановойСебестоимости(/*ДокументОбъект, ПроцентОтклоненияОтПлановойСебестоимости = 0*/)
		{
			if(true/*Не ДокументОбъект.ИспользоватьПлановуюСебестоимость*/)
			{
				/*// Не выполняем никаких действий, если плановая себестоимость в документе не учитывается
*/
			}
			//ИтогПлановаяСебестоимость = ИтогПлановаяСебестоимость(ДокументОбъект);
			if(true/*ИтогПлановаяСебестоимость = Неопределено*/)
			{
				/*// Если итоговая плановая себестоимость неопределена, 
*/
				/*// информация об отклонение от плановой себестоимости будет неопределенной.
*/
				//ИтогОтклонениеОтПлановойСебестоимости		= Неопределено;
				//ПроцентОтклоненияОтПлановойСебестоимости	= Неопределено;
			}
			if(true/*ИтогПлановаяСебестоимость = 0*/)
			{
				//ПроцентОтклоненияОтПлановойСебестоимости = Неопределено;
			}
			return null;
		}
		// ПолучитьИтоговоеОтклонениеОтПлановойСебестоимости()
		// По реквизитам редактируемого документа устанавливает реквизиты общей формы "Цены и Валюта".
		//
		// Параметры:
		//  ФормаЦеныВалюты                - форма, соответствует общей контекст общей форме "Цены и Валюта",
		//  ДокументОбъект                 - объект редактируемого документа
		//  СтруктураРеквизитовДокумента   - структура, задает список обрабатываемых реквизитов документа,
		//                                   если реквизит надо обрабатывать, то для него есть ключ в этой структуре.
		//                                   Множество возможных ключей: (ТипЦен, ВалютаДокумента, КурсДокумента,
		//								     КратностьДокумента, УчитыватьНДС, СуммаВключаетНДС);
		//  ИмяТабличнойЧасти              - строка, имя табличной части, которую надо пересчитать,
		//                                   по умолчанию - "Товары".
		//  ВалютаРегламентированногоУчета - валюта регламентированного учета
		//  НовыйТипЦенДляУстановки        - тип цен, который по возможности нужно установить как новый в форме;
		//

		public void УстановитьТекущиеРеквизитыФормаЦеныВалюты(/*ФормаЦеныВалюты, ДокументОбъект,
	                                                СтруктураРеквизитовДокумента, ИмяТабличнойЧасти,
	                                                ВалютаРегламентированногоУчета,
	                                                НовыйТипЦенДляУстановки = Неопределено*/)
		{
			/*// если хоть в одной табличной части есть хотя бы одна строка, надо пересчитывать
*/
			//МетаданныеДокумента = ДокументОбъект.Метаданные();
			//НадоПересчитывать   = Ложь;
			//ФормаЦеныВалюты.ТабличнаяЧастьПуста = Не НадоПересчитывать;
			/*// Для получения курса на дату
*/
			//ФормаЦеныВалюты.ДатаКурса = ДокументОбъект.Дата;
			/*// определим текущую валюту взиморасчетов
*/
			//ТекущийВалютаВзаиморасчетов = "";
			//Контрагент                  = "";
			if(true/*СтруктураРеквизитовДокумента.Свойство("БезКонтроляВалютыВзаиморасчетов")*/)
			{
				//ТекущийВалютаВзаиморасчетов                 = СтруктураРеквизитовДокумента.БезКонтроляВалютыВзаиморасчетов;
				//ФормаЦеныВалюты.ТекущийВалютаВзаиморасчетов = ТекущийВалютаВзаиморасчетов;
				//ФормаЦеныВалюты.ПересчитатьЦеныПоВалюте     = Истина;
				//Запрос = Новый Запрос;
				/*Запрос.Текст = "
		|ВЫБРАТЬ
		|	Валюты.Ссылка КАК Валюта
		|ИЗ
		|	Справочник.Валюты КАК Валюты
		|УПОРЯДОЧИТЬ ПО
		|	Валюта";*/
				//Выборка = Запрос.Выполнить().Выбрать();
				if(true/*Выборка.Следующий()*/)
				{
					//ФормаЦеныВалюты.ЭлементыФормы.НовыйВалютаДокумента.СписокВыбора.Добавить(Выборка.Валюта);
				}
				//ФормаЦеныВалюты.ЭлементыФормы.НовыйВалютаДокумента.КнопкаОчистки = Ложь;
			}
			/*// Установить текущий курс и кратность
*/
			if(true/*МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено*/)
			{
				//ФормаЦеныВалюты.ТекущийКурсДокумента      = ЗаполнениеДокументов.КурсДокумента(ДокументОбъект, ВалютаРегламентированногоУчета);
				//ФормаЦеныВалюты.ТекущийКратностьДокумента = ЗаполнениеДокументов.КратностьДокумента(ДокументОбъект, ВалютаРегламентированногоУчета);
			}
			/*// Вызов при изменении значения договора
*/
			if(true/*СтруктураРеквизитовДокумента.Свойство("ВызовПриИзмененииЗначенияДоговора")*/)
			{
				//ФормаЦеныВалюты.НовыйВалютаДокумента    = ТекущийВалютаВзаиморасчетов;
				//ФормаЦеныВалюты.ПересчитатьЦеныПоВалюте = Истина;
			}
			/*// Вызов при изменении учетной политики розничная торговля облагается ЕНВД
*/
			//ЗначениеВызова = Неопределено;
			if(true/*СтруктураРеквизитовДокумента.Свойство("ВызовПриИзмененииУчетнойПолитикиЕНВД", ЗначениеВызова)*/)
			{
				if(true/*ЗначениеВызова = "Покупка"*/)
				{
					//ФормаЦеныВалюты.НовыйНДСВключенВСтоимость = Истина;
				}
			}
			/*// если в списке есть тип цен
*/
			/*// и
*/
			/*// если ТипЦен в документе имеет тип ТипЦенКонтрагентов, надо установить владельца
*/
			/*// предполагаем, что если существует реквизит ТипЦен, то он может принимать два значения - 
*/
			/*// типы цен номенклатуры и типы цен контрагентов
*/
			if(true/*СтруктураРеквизитовДокумента.Свойство("ТипЦен") 
	   и Метаданные.НайтиПоТипу(ТипЗнч(ДокументОбъект.ТипЦен)).Имя = "ТипыЦенНоменклатурыКонтрагентов"*/)
			{
				//Контрагент = Справочники.Контрагенты.ПустаяСсылка();
				if(true/*ДокументОбъект.Метаданные().Реквизиты.Найти("Контрагент") <> Неопределено*/)
				{
					//Контрагент = ДокументОбъект.Контрагент;
				}
				//ФормаЦеныВалюты.ЭлементыФормы.НовыйТипЦен.ВыборПоВладельцу = Контрагент;
				/*// сохраним владельца для дальнейшего использования
*/
				//ФормаЦеныВалюты.ВладелецТипаЦен = Контрагент;
			}
			/*// если уже при открытии новый тип цен отличается от текущего, надо обработать изменения реквизитов формы
*/
			if(true/*ФормаЦеныВалюты.НовыйТипЦен <> ФормаЦеныВалюты.ТекущийТипЦен 
	   и ЗначениеЗаполнено(ФормаЦеныВалюты.НовыйТипЦен)*/)
			{
				/*// надо установить флаг СуммаВключаемНДС из типа цены
*/
				//ФормаЦеныВалюты.НовыйСуммаВключаетНДС = ФормаЦеныВалюты.НовыйТипЦен.ЦенаВключаетНДС;
			}
			/*// если мы используем режим выбора из списка для новой валюты документа
*/
			/*// и в списке нет нужной валюты, установим новую валюту в валюту взаиморасчетов
*/
			if(true/*ФормаЦеныВалюты.ЭлементыФормы.НовыйВалютаДокумента.РежимВыбораИзСписка = Истина
	   И ФормаЦеныВалюты.ЭлементыФормы.НовыйВалютаДокумента.СписокВыбора.НайтиПоЗначению(ФормаЦеныВалюты.НовыйВалютаДокумента) = Неопределено*/)
			{
				//ФормаЦеныВалюты.НовыйВалютаДокумента = ФормаЦеныВалюты.ЭлементыФормы.НовыйВалютаДокумента.СписокВыбора[0].Значение;
			}
			/*// Если передан НовыйТипЦенДляУстановки и он подходит по параметрам, установим его в форме
*/
			if(true/*НовыйТипЦенДляУстановки <> Неопределено
	   И СтруктураРеквизитовДокумента.Свойство("ТипЦен") 
	   И Метаданные.НайтиПоТипу(ТипЗнч(ДокументОбъект.ТипЦен)).Имя = НовыйТипЦенДляУстановки.Метаданные().Имя*/)
			{
				//ФормаЦеныВалюты.НовыйТипЦен = НовыйТипЦенДляУстановки;
			}
		}
		// УстановитьТекущиеРеквизитыФормаЦеныВалюты()
		// Устанавливает доступность реквизитов общей формы "Цены и Валюта" согласно переданной структуре.
		//
		// Параметры:
		//  ФормаЦеныВалюты                    - форма, соответствует общей контекст общей форме "Цены и Валюта",
		//  ДокументОбъект                     - обьъект редактируемого документа;
		//  СтруктураРеквизитовДокумента       - структура, задает список обрабатываемых реквизитов документа;
		//                                       если реквизит надо обрабатывать, то для него есть ключ в этой структуре;
		//  СтруктураНеРедактируемыхРеквизитов - структура, задает список реквизитов, которые надо показывать,
		//                                       но не надо давать изменять, необязательный параметр.
		//

		public void УстановитьДоступностьРеквизитовФормаЦеныВалюты(/*ФормаЦеныВалюты, СтруктураРеквизитовДокумента,	СтруктураНеРедактируемыхРеквизитов = Неопределено*/)
		{
			//ФормаЦеныВалюты.ЭлементыФормы.НовыйТипЦен.Доступность                       = СтруктураРеквизитовДокумента.Свойство("ТипЦен");
			//ФормаЦеныВалюты.ЭлементыФормы.НовыйВалютаДокумента.Доступность              = СтруктураРеквизитовДокумента.Свойство("ВалютаДокумента");
			//ФормаЦеныВалюты.ЭлементыФормы.НовыйКурсДокумента.Доступность                = СтруктураРеквизитовДокумента.Свойство("КурсДокумента");
			//ФормаЦеныВалюты.ЭлементыФормы.НовыйКурсВзаиморасчетов.Доступность           = СтруктураРеквизитовДокумента.Свойство("КурсВзаиморасчетов");
			//ФормаЦеныВалюты.ЭлементыФормы.НовыйУчитыватьНДС.Доступность                 = СтруктураРеквизитовДокумента.Свойство("УчитыватьНДС");
			//ФормаЦеныВалюты.ЭлементыФормы.НовыйСуммаВключаетНДС.Доступность             = СтруктураРеквизитовДокумента.Свойство("СуммаВключаетНДС");
			//ФормаЦеныВалюты.ЭлементыФормы.НовыйНДСВключенВСтоимость.Доступность         = СтруктураРеквизитовДокумента.Свойство("НДСВключенВСтоимость");
			//ФормаЦеныВалюты.ЭлементыФормы.НовыйРегистрироватьЦеныПоставщика.Доступность = СтруктураРеквизитовДокумента.Свойство("РегистрироватьЦеныПоставщика");
			//ФормаЦеныВалюты.ЭлементыФормы.НовыйИспользоватьПлановуюСебестоимость.Доступность = СтруктураРеквизитовДокумента.Свойство("ИспользоватьПлановуюСебестоимость");
			/*// Если задана структура исключений, то сделаем недоступными соответствующие реквизиты.
*/
			if(true/*СтруктураНеРедактируемыхРеквизитов <> Неопределено*/)
			{
			}
		}
		// УстановитьДоступностьРеквизитовФормаЦеныВалюты()
		// Устанавливает новые значения реквизитов документа по значениям, выбранным в общей форме "Цены и Валюта"
		//
		// Параметры:
		//  СтруктураРезультирующихЗначений	- структура, содержащая значения реквизитов документа до и после их
		//									  изменеия в форме "Цены и валюта",
		//  ДокументОбъект					- объект редактируемого документа,
		//  СтруктураРеквизитовДокумента	- структура, задает список обрабатываемых реквизитов документа,
		// 									  если реквизит надо обрабатывать, то для него есть ключ в этой структуре
		//

		public void УстановитьРеквизитыДокументаПоЗначениямФормыЦеныВалюта(/*СтруктураРезультирующихЗначений, ДокументОбъект, 
	                                                             СтруктураРеквизитовДокумента*/)
		{
			//МетаданныеДокумента = ДокументОбъект.Метаданные();
		}
		// УстановитьРеквизитыДокументаПоЗначениямФормыЦеныВалюта()
		// Определяет необходимость пересчета табличной части документа при изменении флагов налогообложения
		// в форме "Цены и валюты".
		//
		// Параметры:
		//  СтруктураЗначений	- структура, содержащая значения реквизитов документа до и после их
		//						  изменеия в форме "Цены и валюта".
		//

		public object ОпределитьНеобходимостьПерерасчетаЦены(/*СтруктураЗначений*/)
		{
			return null;
		}
		// ОпределитьНеобходимостьПерерасчетаЦены()
		// Получает контекст общей формы "Цены и Валюта", устанавливает в ней значения и доступность реквизитов
		// по значениям, заданным в документе, и открывает форму.
		//
		// Параметры:
		//  ДокументОбъект                     - обьъект редактируемого документа;
		//  СтруктураРеквизитовДокумента       - структура, задает список обрабатываемых реквизитов документа;
		//                                       если реквизит надо обрабатывать, то для него есть ключ в этой структуре;
		//  ВалютаРегламентированногоУчета     - валюта регламентированного учета
		//  СтруктураНеРедактируемыхРеквизитов - структура, задает список реквизитов, которые надо показывать,
		//                                       но не надо давать изменять, необязательный параметр.
		//  ИмяТабличнойЧасти                  - строка, имя табличной части, которую надо пересчитать,
		//                                       по умолчанию - "Товары".
		//  НовыйТипЦенДляУстановки            - тип цен, который по возможности нужно установить как новый в форме;
		//
		// Возвращаемое значение:
		//  Структура, содержащая значения текущих и устанавливаемых значений для реквизитов документа.
		//

		public object ОткрытьФормуЦеныИВалюта(/*ДокументОбъект, СтруктураРеквизитовДокумента, ВалютаРегламентированногоУчета,
	                              СтруктураНеРедактируемыхРеквизитов = Неопределено,
	                              ИмяТабличнойЧасти, НовыйТипЦенДляУстановки = Неопределено, ВсегдаУчитыватьНДС = Ложь*/)
		{
			//ФормаЦеныВалюты = ПолучитьОбщуюФорму("ФормаЦеныИВалюта");
			/*// Установим текущие реквизиты.
*/
			/*УстановитьТекущиеРеквизитыФормаЦеныВалюты(ФормаЦеныВалюты, ДокументОбъект, 
	                                          СтруктураРеквизитовДокумента, ИмяТабличнойЧасти, 
	                                          ВалютаРегламентированногоУчета, НовыйТипЦенДляУстановки);*/
			/*// передача в форму списка реквизитов документа 											   
*/
			//СписокРеквизитов = новый СписокЗначений;
			//ФормаЦеныВалюты.СписокРеквизитов = СписокРеквизитов;
			/*// Доступность реквизитов формы.
*/
			/*УстановитьДоступностьРеквизитовФормаЦеныВалюты(ФормаЦеныВалюты, СтруктураРеквизитовДокумента, 
	                                               СтруктураНеРедактируемыхРеквизитов);*/
			if(true/*ВсегдаУчитыватьНДС*/)
			{
				//ФормаЦеныВалюты.ЗапретитьОтключениеУчитыватьНДС = Истина;
			}
			/*// Теперь можно и открывать форму, она вернет результат своей работы.
*/
			return null;
		}
		// ОткрытьФормуЦеныИВалюта()
		// Формирует запрос, возвращающий цены для заданных позиций номенклатуры.
		// Используется для получения цен по ТЧ редактирумого документа для последующего пересчета ТЧ
		//
		// Параметры:
		//  СтруктураЗначений   - структура, соответствующая возвращаемой формой "Цены и валюта" (значения реквизитов
		//                        документа до и после их изменеия в общей форме),
		//  СпособЗаполненияЦен - значение перечисления "Способы заполнения цен", определяет по какому из регистров
		//                       ("Цены номенклатуры" или "Цены номенклатуры контрагентов") будет строиться запрос.
		//  МассивНоменклатуры  - массив, содержащий ссылки на элементы номенклатуры, по которым надо узнать цены.
		//  ДатаДокумента       - дата, на которую надо узнать цены
		//  Контрагент          - ссылка на справочник контрагентов, определяет для какого когнтрагента надо узнать цены,
		//  ДоговорКонтрагента  - ссылка на договор контрагента.
		//
		// Возвращаемое значение:
		//  Результат запроса.
		//

		public object СформироватьЗапросПоЦенам(/*СтруктураЗначений, СпособЗаполненияЦен, МассивНоменклатуры,
                                  ДатаДокумента, Контрагент, ДоговорКонтрагента = Неопределено,
                                  Склад = Неопределено*/)
		{
			//СтруктураЗначений.Свойство("НовыйУсловиеПродаж", УсловиеПродаж);
			/*// Достанем нужные цены запросом.
*/
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры);
			//Запрос.УстановитьПараметр("Дата", ПолучитьАктуальнуюДатуРасчетаЦен(ДатаДокумента));
			//Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);
			//Запрос.УстановитьПараметр("Контрагент", Контрагент);
			//Запрос.УстановитьПараметр("УсловиеПродаж", УсловиеПродаж);
			if(true/*СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры*/)
			{
				//Запрос.УстановитьПараметр("ТипЦен", СтруктураЗначений.НовыйТипЦен);
				/*Запрос.Текст = "
		|ВЫБРАТЬ
		|	БазовыеЦены.Номенклатура                                     КАК Номенклатура,
		|	БазовыеЦены.ХарактеристикаНоменклатуры                       КАК ХарактеристикаНоменклатуры,
		|	БазовыеЦены.Номенклатура.ЕдиницаХраненияОстатков             КАК ЕдиницаХраненияОстатков,
		|	БазовыеЦены.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентОсновнойЕдиницы,
		|	БазовыеЦены.ТипЦен                                           КАК ТипЦен,
		|	ЕСТЬNULL(	ВЫБОР	КОГДА БазовыеЦены.Цена = 0.00 И БазовыеЦены.ТипЦен.Рассчитывается	
		|						ТОГДА ЦеныНоменклатурыРассчитываемые.Цена
		|						ИНАЧЕ БазовыеЦены.Цена
		|				КОНЕЦ, 0.00)                                     КАК Цена,
		|	ВЫБОР	КОГДА БазовыеЦены.Цена = 0.00 И БазовыеЦены.ТипЦен.Рассчитывается
		|			ТОГДА ЕСТЬNULL(БазовыеЦены.СпособРасчетаЦены, БазовыеЦены.ТипЦен.СпособРасчетаЦены)
		|			ИНАЧЕ NULL
		|	КОНЕЦ                                                        КАК СпособРасчетаЦены,
		|	ВЫБОР	КОГДА БазовыеЦены.Цена = 0.00 И БазовыеЦены.ТипЦен.Рассчитывается
		|			ТОГДА ЕСТЬNULL(БазовыеЦены.ПроцентСкидкиНаценки, БазовыеЦены.ТипЦен.ПроцентСкидкиНаценки)
		|			ИНАЧЕ 0.00
		|	КОНЕЦ                                                        КАК ПроцентСкидкиНаценки,
		|	ВЫБОР	КОГДА БазовыеЦены.Цена = 0.00 И БазовыеЦены.ТипЦен.Рассчитывается
		|			ТОГДА ЦеныНоменклатурыРассчитываемые.Валюта
		|			ИНАЧЕ БазовыеЦены.Валюта
		|	КОНЕЦ                                                        КАК ВалютаЦены,
		|	ВЫБОР	КОГДА БазовыеЦены.Цена = 0.00 И БазовыеЦены.ТипЦен.Рассчитывается
		|			ТОГДА ЦеныНоменклатурыРассчитываемые.ЕдиницаИзмерения
		|			ИНАЧЕ БазовыеЦены.ЕдиницаИзмерения
		|	КОНЕЦ                                                        КАК ЕдиницаИзмеренияЦены,
		|	ВЫБОР	КОГДА БазовыеЦены.Цена = 0.00 И БазовыеЦены.ТипЦен.Рассчитывается
		|			ТОГДА ЦеныНоменклатурыРассчитываемые.ЕдиницаИзмерения.Коэффициент
		|			ИНАЧЕ БазовыеЦены.ЕдиницаИзмерения.Коэффициент
		|	КОНЕЦ                                                        КАК КоэффициентЕдиницыЦены,
		|	ЕСТЬNULL(НаценкиПоУсловиямПродаж.ПроцентНаценки, 0.00)       КАК ПроцентНаценкиПоУсловиямПродаж,
		|	КурсыВалютСрезПоследних.Кратность                            КАК КратностьВалютыЦены,
		|	КурсыВалютСрезПоследних.Курс                                 КАК КурсВалютыЦены
		|ИЗ
		|	(ВЫБРАТЬ РАЗЛИЧНЫЕ
		|		СпрНоменклатура.Номенклатура КАК Номенклатура,
		|		ЕСТЬNULL(УсловияПоставок.ХарактеристикаНоменклатуры, ЕСТЬNULL(ЦеныНоменклатуры.ХарактеристикаНоменклатуры, СпрНоменклатура.ХарактеристикаНоменклатуры)) КАК ХарактеристикаНоменклатуры,
		|		ВЫБОР	КОГДА ТипыЦенПоГруппам.ТипЦен ЕСТЬ NULL
		|						ИЛИ ТипыЦенПоГруппам.ТипЦен = ЗНАЧЕНИЕ(Справочник.ТипыЦенНоменклатуры.ПустаяСсылка)
		|				ТОГДА &ТипЦен
		|				ИНАЧЕ ТипыЦенПоГруппам.ТипЦен
		|		КОНЕЦ КАК ТипЦен,
		|		ВЫБОР	КОГДА УсловияПоставок.Номенклатура ЕСТЬ NULL ИЛИ ЕСТЬNULL(УсловияПоставок.Цена, 0.00) = 0.00
		|				ТОГДА ЦеныНоменклатуры.СпособРасчетаЦены
		|				ИНАЧЕ NULL
		|		КОНЕЦ КАК СпособРасчетаЦены,
		|		ВЫБОР	КОГДА УсловияПоставок.Номенклатура ЕСТЬ NULL ИЛИ ЕСТЬNULL(УсловияПоставок.Цена, 0.00) = 0.00
		|				ТОГДА ЦеныНоменклатуры.ПроцентСкидкиНаценки
		|				ИНАЧЕ 0.00
		|		КОНЕЦ КАК ПроцентСкидкиНаценки,
		|		ВЫБОР	КОГДА ЕСТЬNULL(УсловияПоставок.Цена, 0.00) = 0.00
		|				ТОГДА ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0.00)
		|				ИНАЧЕ ЕСТЬNULL(УсловияПоставок.Цена, 0.00)
		|		КОНЕЦ КАК Цена,
		|		ВЫБОР	КОГДА ЕСТЬNULL(УсловияПоставок.Цена, 0.00) = 0.00
		|				ТОГДА ЦеныНоменклатуры.ЕдиницаИзмерения
		|				ИНАЧЕ УсловияПоставок.ЕдиницаИзмерения
		|		КОНЕЦ КАК ЕдиницаИзмерения,
		|		ВЫБОР	КОГДА ЕСТЬNULL(УсловияПоставок.Цена, 0.00) = 0.00
		|				ТОГДА ЦеныНоменклатуры.Валюта
		|				ИНАЧЕ УсловияПоставок.ВалютаЦены
		|		КОНЕЦ КАК Валюта
		|		ИЗ
		|		(	ВЫБРАТЬ
		|				СпрХарактеристики.Владелец КАК Номенклатура,
		|				СпрХарактеристики.Ссылка КАК ХарактеристикаНоменклатуры
		|			ИЗ
		|				Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики
		|			ГДЕ
		|				СпрХарактеристики.Владелец В (&МассивНоменклатуры)
					
		|			ОБЪЕДИНИТЬ ВСЕ
					
		|			ВЫБРАТЬ
		|				СпрНоменклатура.Ссылка КАК Номенклатура,
		|				ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры
		|			ИЗ
		|				Справочник.Номенклатура КАК СпрНоменклатура
		|			ГДЕ
		|				СпрНоменклатура.Ссылка В (&МассивНоменклатуры)
		|		) КАК СпрНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ
		|			РегистрСведений.ТипыЦенПоГруппамНоменклатурыДляПокупателей.СрезПоследних(&Дата, Контрагент = &Контрагент) КАК ТипыЦенПоГруппам
		|		ПО
		|			ТипыЦенПоГруппам.НоменклатурнаяЦеноваяГруппа = СпрНоменклатура.Номенклатура.ЦеноваяГруппа
		|			ИЛИ ТипыЦенПоГруппам.НоменклатурнаяЦеноваяГруппа = СпрНоменклатура.Номенклатура.НоменклатурнаяГруппа
		|		ЛЕВОЕ СОЕДИНЕНИЕ
				
		|			РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура В (&МассивНоменклатуры)) КАК ЦеныНоменклатуры
		|		ПО
		|			ЦеныНоменклатуры.Номенклатура = СпрНоменклатура.Номенклатура
		|			И ((ЦеныНоменклатуры.ТипЦен = ТипыЦенПоГруппам.ТипЦен ИЛИ (ТипыЦенПоГруппам.ТипЦен ЕСТЬ NULL ИЛИ ТипыЦенПоГруппам.ТипЦен = ЗНАЧЕНИЕ(Справочник.ТипыЦенНоменклатуры.ПустаяСсылка))
		|			И ЦеныНоменклатуры.ТипЦен = &ТипЦен))
		|		ЛЕВОЕ СОЕДИНЕНИЕ
		|			РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.СрезПоследних(&Дата, ДоговорКонтрагента = &ДоговорКонтрагента И Номенклатура В (&МассивНоменклатуры)) КАК УсловияПоставок
		|		ПО
		|			(УсловияПоставок.Номенклатура = ЦеныНоменклатуры.Номенклатура
		|			И УсловияПоставок.ХарактеристикаНоменклатуры = ЦеныНоменклатуры.ХарактеристикаНоменклатуры)
		|			ИЛИ УсловияПоставок.Номенклатура = СпрНоменклатура.Номенклатура
		|		ГДЕ
		|			СпрНоменклатура.Номенклатура в (&МассивНоменклатуры)
		|	) КАК БазовыеЦены
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура В (&МассивНоменклатуры)) КАК ЦеныНоменклатурыРассчитываемые
		|ПО
		|	БазовыеЦены.Номенклатура = ЦеныНоменклатурыРассчитываемые.Номенклатура
		|	И БазовыеЦены.ХарактеристикаНоменклатуры = ЦеныНоменклатурыРассчитываемые.ХарактеристикаНоменклатуры
		|	И БазовыеЦены.ТипЦен.БазовыйТипЦен = ЦеныНоменклатурыРассчитываемые.ТипЦен
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрСведений.КурсыВалют.СрезПоследних(&Дата) КАК КурсыВалютСрезПоследних
		|ПО
		|	ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
		|		ЦеныНоменклатурыРассчитываемые.Валюта
		|	ИНАЧЕ
		|		БазовыеЦены.Валюта
		|	КОНЕЦ = КурсыВалютСрезПоследних.Валюта
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрСведений.НаценкиПоУсловиямПродаж.СрезПоследних(&Дата, УсловиеПродаж = &УсловиеПродаж) КАК НаценкиПоУсловиямПродаж
		|ПО
		|	БазовыеЦены.Номенклатура.ЦеноваяГруппа = НаценкиПоУсловиямПродаж.НоменклатурнаяЦеноваяГруппа
		|	ИЛИ БазовыеЦены.Номенклатура.НоменклатурнаяГруппа = НаценкиПоУсловиямПродаж.НоменклатурнаяЦеноваяГруппа
		|ГДЕ
		|	ЕСТЬNULL(ВЫБОР КОГДА БазовыеЦены.Цена = 0 И БазовыеЦены.ТипЦен.Рассчитывается Тогда
		|		ЦеныНоменклатурыРассчитываемые.Цена
		|	ИНАЧЕ
		|		БазовыеЦены.Цена
		|	КОНЕЦ, 0) <> 0
		|";*/
			}
			/*// Результат запроса.
*/
			return null;
		}
		// СформироватьЗапросПоЦенам()
		// Заполняет цену в строке ТЧ документа по реквизитам документа и текущим ценам в регистре сведений.
		//
		// Параметры:
		//  ДокументОбъект             - документ;
		//  СтрокаТабличнойЧасти       - строка табличной части редактируемого документа,
		//  СтруктураПоиска            - структра, содержит значение Номенклатуры для поиска в результате запроса,
		//  ВыборкаИзРезультатаЗапроса - результат запроса по текущим ценам,
		//  СтруктураЗначений          - структура, соответствующая возвращаемой формой "Цены и валюта" (значения реквизитов
		//						         документа до и после их изменеия в общей форме),
		//  СпособЗаполненияЦен        - значение перечисления "Способы заполнения цен", влияет на расчет цен
		//						         (см. описание в ПересчитатьЦенуПриИзмененииФлаговНалогов),
		//  ХарактеристикаНоменклатуры - характеристика номенклатуры, для которой ищем цену
		//  ВалютаРегламентированногоУчета - валюта регламентированного учета
		//

		public void ЗаполнитьЦенуВСтрокеТабличнойЧасти(/*ДокументОбъект, СтрокаТабличнойЧасти, СтруктураПоиска, ВыборкаИзРезультатаЗапроса, 
											СтруктураЗначений, СпособЗаполненияЦен, ХарактеристикаНоменклатуры = Неопределено*/)
		{
			/*// получим имя табличной части и имя документа
*/
			//ИмяТабличнойЧасти   = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);
			//МетаданныеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Родитель();
			if(true/*Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Реквизиты.Найти("Цена") = Неопределено*/)
			{
			}
			/*// Найдем товар из текущей строки документа в выборке из результата запроса.
*/
			if(true/*НЕ ЗначениеЗаполнено(СтруктураПоиска.Номенклатура)*/)
			{
				/*// Искать нечего.
*/
			}
			//ВыборкаИзРезультатаЗапроса.Сбросить();
			if(true/*ХарактеристикаНоменклатуры = Неопределено 
	 Или ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()*/)
			{
				//СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
				//НашлиВВыборке = ВыборкаИзРезультатаЗапроса.НайтиСледующий(СтруктураПоиска);
			}
			if(true/*НашлиВВыборке*/)
			{
				/*// Нашли запись
*/
				/*// Если для данного товара есть цена данного типа
*/
				/*// Единицу устанавливаем в единицу цены, если она не задана, то в основную единицу товара
*/
				if(true/*НЕ ЗначениеЗаполнено(ВыборкаИзРезультатаЗапроса.Цена)*/)
				{
					//СтрокаТабличнойЧасти.Цена = 0;
				}
			}
		}
		// ЗаполнитьЦенуВСтрокеТабличнойЧасти()
		// Рассчитываем сумму документа без учета скидки
		//
		// Параметры:
		//  ТабличнаяЧасть - табличная часть, в котором надо посчитать сумму без скидки.
		//
		// Возвращаемое значение:
		//  Сумма документа со всеми налогамии без учета скидки.
		//

		public object ПолучитьСуммуДокументаБезСкидки(/*ТабличнаяЧасть*/)
		{
			//СуммаДокумента = 0;
			return null;
		}
		// ПолучитьСуммуДокументаБезСкидки()
		// Функция формирует и выполняет запрос по спец. предложениям.
		//
		// Параметры:
		//  ДатаДокумента - дата, на которую необходимо сформировать запрос.
		//
		// Возвращаемое значение:
		//  ДеревоЗначений – дерево значений с актуальными спец. предложениями и их комплектующими.
		//

		public object ПолучитьЗапросПоСпецПредложениям(/*ДатаДокумента, МассивПолучателей*/)
		{
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Дата", КонецДня(ДатаДокумента));
			//Запрос.УстановитьПараметр("ПустаяДата", '00010101000000');
			//Запрос.УстановитьПараметр("ДеньНедели", Перечисления.ДниНедели[ДеньНедели(ДатаДокумента) - 1]);
			//Запрос.УстановитьПараметр("ТекущееВремя", Дата(1, 1, 1, Час(ДатаДокумента), Минута(ДатаДокумента), Секунда(ДатаДокумента)));
			//Запрос.УстановитьПараметр("ПустаяНоменклатура", Справочники.Номенклатура.ПустаяСсылка());
			//Запрос.УстановитьПараметр("МассивПолучателей", МассивПолучателей);
			/*ТекстЗапроса = "ВЫБРАТЬ
	               |	СпецПредложения.Номенклатура КАК Номенклатура,
	               |	СпецПредложения.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	               |	СкидкиНатуральные.Качество КАК Качество,
	               |	СпецПредложения.Комплектующая КАК Комплектующая,
	               |	СпецПредложения.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
	               |	СпецПредложения.ЭтоБонус КАК ЭтоБонус,
	               |	СпецПредложения.Количество КАК Количество
	               |ИЗ
	               |	(ВЫБРАТЬ
	               |		СкидкиНатуральные.СпецПредложение КАК СпецПредложение,
	               |		СкидкиНатуральные.ХарактеристикаСпецПредложения КАК ХарактеристикаСпецПредложения,
	               |		СкидкиНатуральные.Качество КАК Качество,
	               |		МАКСИМУМ(СкидкиНатуральные.Регистратор) КАК Регистратор
	               |	ИЗ
	               |		РегистрСведений.СкидкиНоменклатурыНатуральные.СрезПоследних(&Дата, ПолучательСкидки В (&МассивПолучателей)) КАК СкидкиНатуральные
	               |			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВремяДействияСкидок КАК ВремяДействия
	               |			ПО СкидкиНатуральные.Регистратор = ВремяДействия.Регистратор
	               |	ГДЕ
	               |		СкидкиНатуральные.СпецПредложение <> &ПустаяНоменклатура
	               |		И (ВремяДействия.Регистратор ЕСТЬ NULL 
	               |				ИЛИ ВремяДействия.ДеньНедели = &ДеньНедели
	               |					И (&ТекущееВремя МЕЖДУ ВремяДействия.ВремяНачала И ВремяДействия.ВремяОкончания)
	               |					И (СкидкиНатуральные.ДатаОкончания = &ПустаяДата
	               |						ИЛИ СкидкиНатуральные.ДатаОкончания >= &Дата))
	               |	
	               |	СГРУППИРОВАТЬ ПО
	               |		СкидкиНатуральные.СпецПредложение,
	               |		СкидкиНатуральные.ХарактеристикаСпецПредложения,
	               |		СкидкиНатуральные.Качество) КАК СкидкиНатуральные
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СпецПредложения КАК СпецПредложения
	               |		ПО СкидкиНатуральные.Регистратор = СпецПредложения.Регистратор
	               |			И СкидкиНатуральные.СпецПредложение = СпецПредложения.Номенклатура
	               |			И СкидкиНатуральные.ХарактеристикаСпецПредложения = СпецПредложения.ХарактеристикаНоменклатуры
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	Номенклатура
	               |ИТОГИ
	               |	МИНИМУМ(Комплектующая),
	               |	МИНИМУМ(ХарактеристикаКомплектующей),
	               |	МИНИМУМ(ЭтоБонус),
	               |	СУММА(Количество)
	               |ПО
	               |	Номенклатура,
	               |	ХарактеристикаНоменклатуры,
	               |	Качество";*/
			//Запрос.Текст = ТекстЗапроса;
			return null;
		}
		// ПолучитьЗапросПоСпецПредложениям()
		// Проверяет табличную часть на возможность составить спец. предложения.
		//
		// Параметры:
		//  ТоварыНазвание - название ТЧ "Товары" в документах продажи.
		//  ДокументОбъект - документ-объект, из которого вызвана процедура
		//  ТолькоСерые - переменная, куда функция вернет значение Истина,
		//   если можно составить только "серые" комплекты.
		//
		// Возвращаемое значение:
		//  Булево - Истина, если можно составить комплекты, в том числе "серые".
		//

		public object ЕстьСпецПредложения(/*ТоварыНазвание, ДокументОбъект, ТолькоСерые, ВидРеализации*/)
		{
			//МаксИНТ = 999999999999;
			//Товары = ДокументОбъект[ТоварыНазвание];
			//ТолькоСерые = Ложь;
			//МожноСоставитьКомплекты = Ложь;
			/*//При работе с качеством будем поступать следующим образом:
*/
			/*//Если в документе есть качество - то выполняем полноценную работу с качеством;
*/
			/*//Если в документе качества нет - то бонусы ищем только с качеством <Новый>.
*/
			//ЕстьКачество = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Качество", ДокументОбъект.Метаданные(), ТоварыНазвание);
			//КачествоНовый = Справочники.Качество.Новый;
			/*//В ДеревоЗначений поместим все актуальные бонусные комплекты и их комплектующие.
*/
			/*ДЗСпецПредложения = ПолучитьЗапросПоСпецПредложениям(ДокументОбъект.Дата,
	   ПолучитьМассивПолучателейСкидки(ВидРеализации, ДокументОбъект));*/
			return null;
		}
		// ЕстьСпецПредложения()
		// Рассчитывает возможные натуральные скидки (бонусные комплекты).
		// Если такие есть, то открывает форму для подбора бонусных комплектов.
		//
		// Параметры:
		//  ТоварыНазвание - название ТЧ "Товары" в документах продажи.
		//  ДокументОбъект - документ-объект, из которого вызвана процедура
		//

		public void РассчитатьНатуральныеСкидки(/*ТоварыНазвание, ДокументОбъект, ФормаДокумента, ВидРеализации*/)
		{
			//МаксИНТ = 999999999999;
			//Товары = ДокументОбъект[ТоварыНазвание];
			/*//При работе с качеством будем поступать следующим образом:
*/
			/*//Если в документе есть качество - то выполняем полноценную работу с качеством;
*/
			/*//Если в документе качества нет - то бонусы ищем только с качеством <Новый>.
*/
			//ЕстьКачество = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Качество", ДокументОбъект.Метаданные(), ТоварыНазвание);
			//КачествоНовый = Справочники.Качество.Новый;
			/*//В ДеревоЗначений поместим все актуальные бонусные комплекты и их комплектующие.
*/
			/*ДЗСпецПредложения = ПолучитьЗапросПоСпецПредложениям(ДокументОбъект.Дата,
	   ПолучитьМассивПолучателейСкидки(ВидРеализации, ДокументОбъект));*/
			//НачатьВыборкуЗаново = Истина;
			while(true/*НачатьВыборкуЗаново*/)
			{
				//НачатьВыборкуЗаново = Ложь;
				/*//Создадим ДеревоЗначений для хранения доступных бонусных комплектов.
*/
				//ДЗНовыеБонусы = Новый ДеревоЗначений;
				//ДЗНовыеБонусы.Колонки.Добавить("Номенклатура");
				//ДЗНовыеБонусы.Колонки.Добавить("ХарактеристикаНоменклатуры");
				//ДЗНовыеБонусы.Колонки.Добавить("Качество");
				//ДЗНовыеБонусы.Колонки.Добавить("Количество");
				//ДЗНовыеБонусы.Колонки.Добавить("Комплектующая");
				//ДЗНовыеБонусы.Колонки.Добавить("ХарактеристикаКомплектующей");
				//ДЗНовыеБонусы.Колонки.Добавить("ЭтоБонус");
				//ДЗНовыеБонусы.Колонки.Добавить("СерыйБонус");
				//ДЗНовыеБонусы.Колонки.Добавить("КоличествоЕсть");
				/*//Если есть доступные бонусные комплекты - откроем форму для выбора комплекта.
*/
				if(true/*ДЗНовыеБонусы.Строки.Количество() > 0*/)
				{
					//ФормаВыбораБонуса = ПолучитьОбщуюФорму("ВыборБонуснойНоменклатуры");
					//ФормаВыбораБонуса.СпецПредложения = ДЗНовыеБонусы.Скопировать();
					//ВыбранныйБонус = ФормаВыбораБонуса.ОткрытьМодально();
					/*//Если пользователь выбрал бонусный комплект,
*/
					/*//то заменим комплектующие из таблицы документа этим комплектом,
*/
					/*//иначе - вернемся в форму документа.
*/
					if(true/*ВыбранныйБонус <> Неопределено*/)
					{
						//СтруктураСтроки = Новый Структура;
						//СтруктураСтроки.Вставить("Номенклатура"              , ВыбранныйБонус.Номенклатура);
						//СтруктураСтроки.Вставить("ХарактеристикаНоменклатуры", ВыбранныйБонус.ХарактеристикаНоменклатуры);
						//СтруктураСтроки.Вставить("Качество"                  , ВыбранныйБонус.Качество);
						//МассивБонусов = ДЗНовыеБонусы.Строки.НайтиСтроки(СтруктураСтроки, Ложь);
						//Бонус = МассивБонусов[0];
						//Бонус.Количество = ВыбранныйБонус.ВыбранноеКоличество;
						/*//Уберем комплектующие бонусного комплекта из таблицы документа.
*/
						//СтруктураСтроки = Новый Структура;
						//СтруктураСтроки.Вставить("Номенклатура"              , Бонус.Номенклатура);
						//СтруктураСтроки.Вставить("ХарактеристикаНоменклатуры", Бонус.ХарактеристикаНоменклатуры);
						if(true/*ЕстьКачество*/)
						{
							//СтруктураСтроки.Вставить("Качество", Бонус.Качество);
						}
						//НовыйБонус = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(Товары, СтруктураСтроки);
						/*//Если такого бонусного комплекта в таблице документа нет, то добавим его,
*/
						/*//иначе - просто увеличим количество.
*/
						if(true/*НовыйБонус = Неопределено*/)
						{
							//НовыйБонус = Товары.Добавить();
							//НовыйБонус.КлючСтроки = УправлениеЗапасами.ПолучитьНовыйКлючСтроки(ДокументОбъект);
							//НовыйБонус.Номенклатура = Бонус.Номенклатура;
							//НовыйБонус.ХарактеристикаНоменклатуры = Бонус.ХарактеристикаНоменклатуры;
							//НовыйБонус.Количество = Бонус.Количество;
							//НовыйБонус.ЕдиницаИзмерения = НовыйБонус.Номенклатура.ЕдиницаХраненияОстатков;
							if(true/*ЕстьКачество*/)
							{
								//НовыйБонус.Качество = Бонус.Качество;
							}
						}
						/*//Нужно вызвать обработчик события при изменении Номенклатуры.
*/
						//ФормаДокумента.ИзменениеСтрокиПрограммное(НовыйБонус, "Номенклатура");
						/*//Запустим проверку на возможные бонусные комплекты еще раз.
*/
						//НачатьВыборкуЗаново = Истина;
					}
				}
			}
			//;;
		}
		// Процедура проверяет, можно ли покупателю заменить дисконтную карту на карту более высокого уровня.
		// Если такая замена возможна, то выдается соответствующее предупреждение.
		//
		// Параметры:
		//  ДокументОбъект - Объект документа, из которого вызвана процедура.
		//  УчетнаяПолитика - Структура, содержащая данные учетной политики.
		//

		public void ПроверитьВозможностьЗаменыДисконтнойКарты(/*ДокументОбъект, УчетнаяПолитика*/)
		{
			if(true/*ДокументОбъект.Проведен
	   И ЗначениеЗаполнено(ДокументОбъект.ДисконтнаяКарта)
	   И УчетнаяПолитика.ИспользоватьСкидкиПоДисконтнойКарте
	   И УчетнаяПолитика.ИспользоватьНакопительныеСкидкиПоДисконтнымКартам
	   И УчетнаяПолитика.СпособИспользованияНакопительныхСкидок = Перечисления.СпособыИспользованияНакопительныхСкидок.СкидкиНакапливаютсяПоВладельцуДисконтнойКарты*/)
			{
				//ПериодНакопления = ОбработкаТабличныхЧастей.ПолучитьПериодРасчетаНакопительныхСкидок(ДокументОбъект.Дата, УчетнаяПолитика);
				/*Запрос = Новый Запрос("
		|ВЫБРАТЬ
		|	РегПродажи.СуммаОборот КАК Сумма,
		|	РегПороги.ЗначениеПорога КАК ЗначениеПорога
		|ИЗ
		|	РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(&ДатаНач, &ДатаКон, ,
		|	   ВладелецДисконтнойКарты = &ВладелецДисконтнойКарты) КАК РегПродажи
		|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|	(ВЫБРАТЬ
		|		Пороги.НижняяГраница,
		|		Пороги.ЗначениеПорога
		|	ИЗ
		|		РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&ДатаКон) КАК Пороги
		|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|		(ВЫБРАТЬ
		|			МАКСИМУМ(ПорогиМакс.Период) КАК Период
		|		ИЗ
		|			РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&ДатаКон) КАК ПорогиМакс
		|	) КАК ПорогиМакс
		|	ПО
		|		Пороги.Период = ПорогиМакс.Период
		|) КАК РегПороги
		|ПО
		|	РегПороги.НижняяГраница <= ЕСТЬNULL(РегПродажи.СуммаОборот, 0)
		|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|	(ВЫБРАТЬ
		|		МАКСИМУМ(РегПороги.НижняяГраница) КАК НижняяГраница
		|	ИЗ
		|		РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(&ДатаНач, &ДатаКон, ,
		|		   ВладелецДисконтнойКарты = &ВладелецДисконтнойКарты) КАК РегПродажи
		|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|		(ВЫБРАТЬ
		|			Пороги.НижняяГраница
		|		ИЗ
		|			РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&ДатаКон) КАК Пороги
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		|			(ВЫБРАТЬ
		|				МАКСИМУМ(ПорогиМакс.Период) КАК Период
		|			ИЗ
		|				РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&ДатаКон) КАК ПорогиМакс
		|			) КАК ПорогиМакс
		|		ПО
		|			Пороги.Период = ПорогиМакс.Период
		|		) КАК РегПороги
		|	ПО
		|		РегПороги.НижняяГраница <= ЕСТЬNULL(РегПродажи.СуммаОборот, 0)
		|	) КАК РегПорогиМакс
		|ПО
		|	РегПорогиМакс.НижняяГраница = РегПороги.НижняяГраница
		|");*/
				//Запрос.УстановитьПараметр("ДатаНач", ПериодНакопления.ДатаНач);
				//Запрос.УстановитьПараметр("ДатаКон", ПериодНакопления.ДатаКон);
				//Запрос.УстановитьПараметр("ВладелецДисконтнойКарты", ДокументОбъект.ДисконтнаяКарта.ВладелецКарты);
				//Выборка = Запрос.Выполнить().Выбрать();
				if(true/*Выборка.Следующий()*/)
				{
					//ТекВидКарты = ДокументОбъект.ДисконтнаяКарта.ВидДисконтнойКарты;
					if(true/*Выборка.ЗначениеПорога <> ТекВидКарты*/)
					{
						/*Предупреждение("Сумма, накопленная покупателем, составила " + (ОбщегоНазначения.ФорматСумм(Выборка.Сумма,
				глЗначениеПеременной("ВалютаУправленческогоУчета")))+"." + Символы.ПС + Символы.ПС
				   + "Покупателю можно обменять дисконтную карту" + Символы.ПС
				   + """" + СокрЛП(ТекВидКарты) + """ на """ + СокрЛП(Выборка.ЗначениеПорога) + """.");*/
					}
				}
			}
		}
		// ПроверитьВозможностьЗаменыДисконтнойКарты()
	}
}
